package com.demo.search.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.Field.TermVector;

/**
 * 属性索引注解对象
 * <p/>
 * 对象属性进行注解,可以自动索引+反向对象创建
 * @author ryuu.kk
 *
 */
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface SearchableProperty {

    /**
     * 属性类型
     * @return Class<?>
     */
    Class<?> type() default Object.class;

    /**
     * 属性转换器
     * @return String
     */
    String propertyConverter() default "";

    /**
     * Field名称key
     * @return String
     */
    String name() default "";

    /**
     * boost
     * @return float
     */
    float boost() default 1.0f;

    /**
     * 索引存储
     * @return Store
     */
    Store store() default Store.YES;

    /**
     * 索引常量,被分析和加权
     * @return Index
     */
    Index index() default Index.NOT_ANALYZED;

    /**
     * 向量(默认不使用)
     * @return TermVector
     */
    TermVector termVector() default TermVector.NO;

    /**
     * 转换器
     * @return String
     */
    String converter() default "";

    /**
     * 默认格式化字段
     * @return String
     */
    String format() default "";

    /**
     * 字段空值时,使用该字段,需要索引
     * @return String
     */
    String nullValue() default "";
    
    /**
     * 字段允许高亮,若使用该字段,创建索引需要Index.
     * @return
     */
    boolean allowHighlighter() default false;
}

